// 导入http包
const http = require("http");
const mathApi = require("./apis/mathApi");
const fileApi = require("./apis/fileApi");
const { port, baseUrl } = require("./config");
const { getUrlInfo } = require("./utils/reqUtil");

// 通过http包创建服务端实例
const server = http.createServer(
  // /**
  //  * 请求处理器函数
  //  * @param {Object} req request 用户请求信息的对象封装
  //  * @param {Object} res response 用于给用户返回响应的对象
  //  */
  (req, res) => {
    // 支持一下中文
    res.setHeader("Content-Type", "*/*;charset=utf8;");

    /* 派发接口 */
    switch (true) {
      /* 查看URL完整信息 */
      case req.url.startsWith("/getUrlInfo"):
        res.end(JSON.stringify(getUrlInfo(req)));
        break;

      /* 受理数学运算服务 */
      // /math/add?a=12&b=34
      // 所有数学服务请求直接派发给mathApi模块处理
      case req.url.startsWith("/math/"):
        mathApi.handle(req, res);
        break;

      /* 受理静态资源服务 */
      case req.url.startsWith("/file/"):
        fileApi.handle(req, res);
        break;

      default:
        res.end(
          JSON.stringify({
            Date: new Date().toString(),
            url: req.url,
            method: req.method,
          })
        );
        break;
    }
  }
);

// 将server实例挂载在8001端口 挂载成功后打印日志
server.listen(port, () => console.log(`server is listening at ${baseUrl}`));
